package Chat.Donnees;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;

/**
 * Format général d'un message envoyé sur le réseau
 * 
 * @author Ndanja & Papa Abdou
 */
public class Message implements Serializable {

    private Contact srcContact;
    private String texte;
    private Contact dstContact;

    /**
     *
     * @param srcContact: le Contact source
     */
    public Message(Contact srcContact) {
        this.srcContact = srcContact;
    }

    /**
     * Permet de récupérer le Contact source
     * @return
     */
    public Contact getSource() {
        return this.srcContact;
    }

    /**
     * Permet de récupérer le Contact de destination
     * @return
     */
    public Contact getDest() {
        return this.dstContact;
    }

    /**
     * Permet de récupérer le texte contenu dans le message
     * @return
     */
    public String getTexte() {
        return this.texte;
    }

    /**
     * Permet de "serialisé" le message à envoyé
     * @param m
     * @return
     * @throws Exception
     */
    public static byte[] toByteArray(Message m) throws Exception {
        ByteArrayOutputStream os = new ByteArrayOutputStream();
        ObjectOutputStream oo = new ObjectOutputStream(os);
        oo.writeObject(m);
        oo.flush();
        oo.close();
        return os.toByteArray();
    }

    /**
     * Permet de récupérer le Message reçu à partir du réseau
     * @param data
     * @param offset
     * @param length
     * @return
     * @throws Exception
     */
    public static Message getMessage(byte[] data, int offset, int length) throws Exception {
        ByteArrayInputStream is = new ByteArrayInputStream(data, offset, length);
        ObjectInputStream oi = new ObjectInputStream(is);
        Message m = (Message) oi.readObject();
        oi.close();
        is.close();
        return m;
    }

    /**
     * Permet de préciser le Contact source
     * @param srcContact: le Contact source
     */
    public void setSrcContact(Contact srcContact) {
        this.srcContact = srcContact;
    }

    @Override
    public String toString() {
        return "Message/Source=" + srcContact.toString();
    }
}

